# 列表的相关操作 列表中的元素可以各不相同，可以是任意类型。

# 列表的创建
a = ["abc",100,200.3,True] # 各个元素的类型可以不同
b = [] # 创建的空列表

# list()的创建
a = list()
c = list("周文生") #['周', '文', '生']
print(c)
# range创建整数列表 range([start,] end [,step]) python3 中 range()返回的是一个 range 对象，而不是列表。
# 我们需要通过 list()方法将其转换成列表对象。
b = list(range(3,15,2))
print(b)
c = list(range(15,3,-1))
print(c)
# 推导式创建列表
d = [x *2 for x in range(100) if x%2==0]
print(d)

# 列表的添加和删除
a = [20,40]
a.append(80)
print(a)

# +运算符操作 将原列表的元素和新列表的元素依次复制到新的列表对象中，会涉及大量的复制操作,数据量大的时候不建议使用
a = [20,40]
b=a+[40]
print(b)

# extend方法 将目标列表的所有元素添加到本列表的尾部，属于原地操作，不创建新的列表对象。
a = [20,40]
a.extend([50,60])
print(a)

# insert插入元素
a = [10,20,30,40]
a.insert(3,"nihao")
print(a)

# 乘法扩展
a = ["sxt"]
b = a*3
print(b)

# 删除元素
a = [100, 200, 888, 300, 400]
del a[1]
print(a)

# 删除并返回指定位置元素，如果未指定位置则默认操作列表最后一个元素
a = [10,20,30,40,50]
a.pop(3)
a.pop()
a.remove(20) # 删除指定元素
print(a)

# 列表元素的访问与统计
a = [10,20,30,40,50,20,30,20,30]
print(a[2])
print(a.index(20)) # 指定索引元素在列表中出现的位置 index(value,[start,[end]])。其中， start 和 end 指定了搜索的范围。
print(a.index(30, 5, 7))
print(a.count(20)) # 指定元素在列表中出现的次数
print(len(a)) # 返回列表的长度
print(20 in a) # 判断某一个元素在a中是否存在
print(100 not in a) # 判断某一个元素在列表中是否不存在

# 切片操作 同字符串 这里省略
# 列表的遍历
for i in a:
    print(i)

# 复制列表
a = [x*2 for x in range(10) if x%2==0]
b = a
print(b)
c = a + []
print(c)

# 排序,不创建新的列表
a = [20, 10, 30, 40]
a.sort() # 默认是升序排序
print(a)
a.sort(reverse=True) # 降序排序
print(a)

import random
random.shuffle(a) # 打乱顺序
print(a)

# 排序 创建新的列表
a = [20, 10, 30, 40,100]
b = sorted(a) # 升序排列
print(b)
c = sorted(a,reverse=True)
print(c)

# 列表的其它内置函数max min sum
a = [20, 10, 30, 40,100]
b = sum(a)
print(b)

# 多维列表,其实就是二维数组
a = [["高小一",18,30000,"北京"],
["高小二",19,20000,"上海"],
["高小一",20,10000,"深圳"]]










